查看原文
其他

业务日志监控工具Sentry介绍

无敌码农 无敌码农 2020-10-17

“ 我们在完成业务系统上线后除了正常关注系统进程、内存、CPU等这些物理指标并进行监控外,往往也需要观察线上业务日志的运行情况,特别是新系统上线后的业务异常日志排查分析是主动发现系统问题并进行优化迭代的一种非常有效地手段,但是没有一种好用的工具去监控分析,也是一件很累、很低效的事情,这里给大家介绍一款非常好用的业务日志监控工具—Sentry”。



记得小码农刚工作的时候,正好刚上公司做了一个新项目,系统上线试运行期间技术Leader会安排每个组每天专人登陆系统部署服务器,把各个模块每天的异常日志整理出来,然后再指定给负责的研发同学进行排查迭代。至于整理方式嘛....


//查看异常内容

cat txx_Biz.log.2018-04-27-PM|grep Exception

//统计异常次数

cat cxx_Biz.log.2018-04-27-AM |grep ERROR| awk -F '[' '{print $2}'|awk -F ' ' '{print $1}'| sort |uniq -c|wc -l

.....

,好期待有个好工具能帮忙干这事。


什么是Sentry?


作为一个Coding农,我们通常的工作流程大概是这个样子的:


虽然我们有很多工具可以让开发工作变得更容易,但是发现和排查线上问题的过程仍然在很多时候让我们觉得很痛苦。当生产系统中产生了一个bug时,我们如何快速地得到报警?如何评估它的影响和紧迫性?如何快速地找到问题的根源?当hotfix完修复程序后,又如何知道它是否解决了问题?


Sentry在帮助我们与现有流程集成时回答了这些问题。例如,线上有一个bug,代码的某处逻辑的NullPointerException造成了这个问题,Sentry会立即发现错误,并通过邮件或其他基于通知规则的集成通知到相关责任人员,这个通知可以把我们引入到一个指示板,这个指示板为我们提供了快速分类问题所需的上下文,如:频率、用户影响、代码那一部分受到影响以及那个团队可能是问题的所有者。


然后,它会显示帮助我们调试的详细信息,比如堆栈跟踪、堆栈本地信息、前面的事件、可能导致问题的提交以及在错误发生时捕获的定制数据。我们还可以在JIRA等项目管理工具中自动开始跟踪问题。


看到这里,是不是觉得Sentry确实是一个好东西呢?


Sentry的原理


那么Sentry是如何实现实时日志监控报警的呢?首先,Sentry是一个C/S架构,我们需要在自己应用中集成Sentry的SDK才能在应用发生错误是将错误信息发送给Sentry服务端。根据语言和框架的不同,我们可以选择自动或自定义设置特殊的错误类型报告给Sentry服务端。



而Sentry的服务端分为web、cron、worker这几个部分,应用(客户端)发生错误后将错误信息上报给web,web处理后放入消息队列或Redis内存队列,worker从队列中消费数据进行处理。


Docker化安装&部署


1、安装Docker

Docker是一个开源的应用容器引擎,可以让开发者及运维人员方便地将他们的应用及依赖包打包到一个可移植的容器中,然后发布到任何流行的机器上。通过Docker可以很方便地安装Sentry服务及其所依赖的服务。


具体安装方法可以参考链接:

https://www.docker.com/get-started


2、编译容器

找到一个安装目录,当前假定为 /data/sentry,并进入此目录。

首先拉取配置和构建文件仓库:

git clone https://github.com/getsentry/onpremise.git

然后进入目录仓库目录,默认为 onpremise。


创建以下文件夹:

mkdir -p data/{sentry,postgres}

构建Docker Services

docker-compose build

下一步生成秘钥:
docker-compose run --rm web config generate-secret-key

这一步会产生一个秘钥,复制它到 docker-compose.yml 文件的 SENTRY_SECRET_KEY 项,并取消 SENTRY_SECRET_KEY 项的注释,例子如下:

#Run `docker-compose run web config generate-secret-key`# to get the SENTRY_SECRET_KEY value.SENTRY_SECRET_KEY: '*********************'
SENTRY_MEMCACHED_HOST: memcached

然后创建相关数据库和账号:

docker-compose run --rm web upgrade

这一步会要求你填写一个账号密码,用于安装完成之后登录后台的管理员账号,请填写并记录。

使用 docker-compose 启动所有容器并提供服务:

docker-compose up -d

命令可以看到类似如下的容器列表:

docker-compose ps


进入容器进行具体查看

docker exec -it 0ae60dab3f0c /bin/bash


3、访问实例


此时Sentry服务端就安装成功了!


客户端SDK

安装完Sentry服务端后,我们就可以在应用中集成Sentry客户端SDK,实时上报错误日志了。


具体可参考如下链接:

https://docs.sentry.io/quickstart/#pick-a-client-integration

https://docs.sentry.io/server/installation/

https://github.com/getsentry/onpremise


— 完 —

如果觉得小哥在认真写文章,对你有所帮助

还请关注转发哦

长按下方图片,识别二维码,即可关注!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存